home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (DO) / Softdisk Magazette Volume 2, No. 02 (1982-10)(Softdisk)(Side B).zip / Softdisk Magazette Volume 2, No. 02 (1982-10)(Softdisk)(Side B).do / FIREFLIES.bas < prev    next >
BASIC Source File  |  1996-12-24  |  8KB  |  209 lines

  1. 2  LOMEM: 16385
  2. 5 D$ =  CHR$(4)
  3. 7  TEXT : HOME : PRINT : INPUT "TODAY'S DATE (M/D/Y): ";SD$
  4. 10  PRINT D$"BLOAD FIREFLY.SHAPES": POKE 232,1: POKE 233,96
  5. 20  DIM X%(30),Y%(30),L%(30),TL%(30)
  6. 40 MR = 770:MT = 6:ML = 7
  7. 60  FOR A = 770 TO 798: READ I: POKE A,I: NEXT 
  8. 70  DATA  173,48,192,136,208,4,198,7,240,8,202,208,246,166,6,76,2,3,96,104,168,104,166,223,154,72,152,72,96
  9. 75  GOSUB 30000
  10. 80  REM NG
  11. 82  HOME : PRINT : PRINT "FIREFLIES - BY DAN TOBIAS - JULY 1982"
  12. 87  PRINT : PRINT "HIT ANY KEY TO START. ";: GET I$: PRINT : HOME 
  13. 90 SN = 0:JN = 8:OF = 0:SC = 0
  14. 95  SCALE= 1
  15. 100  REM  NS
  16. 101 I = 0
  17. 102 KB = 0:SN = SN +1
  18. 105 X = 140:Y = 80: IF OF <30  THEN OF = OF +5
  19. 106 TL = 50 +(OF *15)
  20. 107 NF = OF:N2 = NF:NL = NF
  21. 110  FOR A = 1 TO NF
  22. 120 X%(A) =  RND(1) *280:Y%(A) =  RND(1) *160
  23. 130 L%(A) =  RND(1) *2:TL%(A) =  RND(1) *3
  24. 150  NEXT 
  25. 155 KX% = ( RND(1) *320) -20:KY% =  -80:KL% =  RND(1) *2: IF  RND(1) <.5  THEN KY% = 240
  26. 157 KT% =  RND(1) *3
  27. 160  HGR : HOME 
  28. 161  VTAB 21: HTAB 1: PRINT "SCORE: "SC; TAB( 20);"HI SCORE: ";HS(0,1)
  29. 162  HCOLOR= 3
  30. 163  VTAB 22: HTAB 1: PRINT "FIREFLIES ON SCREEN: ";N2; TAB( 26);"TIME LEFT: ";TL: PRINT "FIREFLIES LEFT:      ";N2; TAB( 26);"SCREEN #:  ";SN
  31. 164  POKE MT,110: POKE ML,100: CALL MR: POKE MT,132: POKE ML,50: CALL MR: POKE MT,125: POKE ML,50: CALL MR: POKE MT,110: POKE ML,150: CALL MR
  32. 165  POKE MT,125: POKE ML,50: CALL MR: POKE MT,132: POKE ML,100: CALL MR: POKE MT,149: POKE ML,100: CALL MR: POKE MT,165: POKE ML,200: CALL MR
  33. 167  DRAW 1 AT X,Y
  34. 170  FOR A = 1 TO NF
  35. 173 XC =  INT( RND(1) *10) -5:YC =  INT( RND(1) *10) -5:LC = L%(A):TL%(A) = TL%(A) +1: IF TL%(A) >2  THEN LC =   NOT LC:TL%(A) = 0
  36. 175 F% = 0
  37. 177  IF X%(A) <0  OR X%(A) >279  OR Y%(A) <0  OR Y%(A) >159  THEN F% = 1: GOTO 200
  38. 180  HCOLOR= 0
  39. 190  HPLOT X%(A),Y%(A)
  40. 200 X%(A) = X%(A) +XC:Y%(A) = Y%(A) +YC:L%(A) = LC
  41. 210  IF X%(A) <0  OR X%(A) >279  OR Y%(A) <0  OR Y%(A) >159  THEN N2 = N2 -(  NOT F%): GOTO 300
  42. 215  IF F% = 1  THEN N2 = N2 +1
  43. 220  HCOLOR= L%(A) *3
  44. 230  HPLOT X%(A),Y%(A)
  45. 300  REM 
  46. 302  VTAB 22: HTAB 22: PRINT N2;" ": VTAB 23: HTAB 22: PRINT NL;" "
  47. 303  IF N2 = 0  THEN A = 999: NEXT : GOTO 900
  48. 305  GOSUB 500
  49. 307  IF A/5 =  INT(A/5)  THEN  GOSUB 312
  50. 310  NEXT : GOSUB 800: IF NF <5  THEN  GOSUB 312
  51. 311  GOTO 170
  52. 312  IF KB = 1  THEN  POKE MT,180: POKE ML,90: CALL MR
  53. 315 KB = 0
  54. 320 XC =  INT( RND(1) *12) * SGN(X -KX%):YC =  INT( RND(1) *12) * SGN(Y -KY%):LC = KL%:KT% = KT% +1: IF KT% >2  THEN LC =   NOT LC:KT% = 0
  55. 330  IF KX% <3  OR KX% >270  OR KY% <0  OR KY% >155  THEN 360
  56. 340  HCOLOR= 0: DRAW 2 AT KX%,KY%
  57. 360 KX% = KX% +XC:KY% = KY% +YC:KL% = LC
  58. 370  IF KX% <3  OR KX% >270  OR KY% <0  OR KY% >155  THEN 400
  59. 380  HCOLOR= KL% *3: DRAW 2 AT KX%,KY%
  60. 390 KB = 1
  61. 400  IF KX% <X  OR KX% >X +16  OR KY% >Y  OR KY% <Y -12  OR (KY% <Y -9  AND (KX% <X +3  OR KX% >X +13))  THEN  RETURN 
  62. 410  HCOLOR= 3: DRAW 2 AT KX%,KY%
  63. 420  POKE MT,200: POKE ML,200: CALL MR
  64. 430  POP : GOTO 9000
  65. 500  REM 
  66. 505 TL = TL -1: VTAB 22: HTAB 37: PRINT TL" "
  67. 507  IF TL < = 0  THEN  POKE MT,210: POKE ML,200: CALL MR: POP : GOTO 9000
  68. 508 OI = I
  69. 509  IF  PEEK( -16384) <128  THEN 515
  70. 510 I =  PEEK( -16384): POKE  -16368,0:I = I -128
  71. 515 XC = 0:YC = 0
  72. 516  IF I = 19  THEN  VTAB 1: GET I$:I = OI: GOTO 509
  73. 517  IF I = 32  THEN I = 0: GOTO 600
  74. 520  IF I = 74  THEN XC =  -1
  75. 530  IF I = 75  THEN XC = 1
  76. 540  IF I = 73  THEN YC =  -1
  77. 550  IF I = 77  THEN YC = 1
  78. 551  IF I = 72  THEN JN = 4:I = OI: GOTO 517
  79. 552  IF I = 76  THEN JN = 8:I = OI: GOTO 517
  80. 553  IF XC = 0  AND YC = 0  THEN  RETURN 
  81. 556 XC = XC *JN:YC = YC *JN
  82. 560  IF X +XC <1  THEN XC = 1 -X
  83. 562  IF X +XC >262  THEN XC = 262 -X
  84. 564  IF Y +YC <12  THEN YC = 12 -Y
  85. 566  IF Y +YC >158  THEN YC = 158 -Y
  86. 570  HCOLOR= 0: DRAW 1 AT X,Y
  87. 580  HCOLOR= 3:X = X +XC:Y = Y +YC: DRAW 1 AT X,Y
  88. 590  RETURN 
  89. 600  REM C
  90. 610  FOR B = 1 TO NF
  91. 620 XB = X%(B):YB = Y%(B)
  92. 630  IF XB <X  OR XB >X +16  OR YB >Y  OR YB <Y -12  OR (YB <Y -9  AND (XB <X +3  OR XB >X +13))  THEN 670
  93. 640 SC = SC +10:NL = NL -1:N2 = N2 -1: VTAB 22: HTAB 22: PRINT N2" ": VTAB 23: HTAB 22: PRINT NL" "
  94. 641  VTAB 21: HTAB 8: PRINT SC
  95. 642  HCOLOR= 3: HPLOT XB,YB
  96. 645  POKE MT,110: POKE ML,50: CALL MR
  97. 647  HCOLOR= 0: HPLOT XB,YB
  98. 650 X%(B) =  -16384:Y%(B) =  -16384
  99. 670  NEXT B
  100. 680  IF KX% <X  OR KX% >X +16  OR KY% >Y  OR KY% <Y -12  OR (KY% <Y -9  AND (KX% <X +3  OR KX% >X +13))  THEN  RETURN 
  101. 685  HCOLOR= 3: DRAW 2 AT KX%,KY%
  102. 690  POKE MT,100: POKE ML,60: CALL MR: POKE MT,150: POKE ML,40: CALL MR: POKE MT,100: POKE ML,60: CALL MR
  103. 700 SC = SC +500
  104. 705  VTAB 21: HTAB 8: PRINT SC
  105. 710  HCOLOR= 0: DRAW 2 AT KX%,KY%:KX% =  -16384:KY% =  -16384
  106. 715 KB = 0
  107. 720  RETURN 
  108. 800  REM 
  109. 810 A = 1
  110. 820  IF X%(A) < -10000  THEN 850
  111. 830 A = A +1: IF A < = NF  THEN 820
  112. 840  RETURN 
  113. 850  IF A = NF  THEN NF = NF -1: RETURN 
  114. 860  FOR B = A +1 TO NF:X%(B -1) = X%(B):Y%(B -1) = Y%(B):L%(B -1) = L%(B)
  115. 870 TL%(B -1) = TL%(B): NEXT 
  116. 880 NF = NF -1: GOTO 830
  117. 900  REM  DONE WITH BOARD
  118. 910  IF NL = 0  THEN SC = SC +100
  119. 920 SC = SC +50
  120. 925 SC = SC +TL
  121. 930  GOTO 100
  122. 9000  REM  END
  123. 9010  GOSUB 31000: POKE  -16304,0: VTAB 24
  124. 9015  HTAB 1
  125. 9020  PRINT "      GAME OVER.  Q=QUIT, P=PLAY";
  126. 9025  HTAB 1
  127. 9040  GOTO 32000
  128. 9050  REM 
  129. 9060  FOR A = 1 TO 300: GOSUB 9100: NEXT A
  130. 9070  GOTO 32000
  131. 9100  REM 
  132. 9110 I =  PEEK( -16384): POKE  -16368,0
  133. 9120  IF I =  ASC("Q") +128  THEN  POP : GOTO 33000
  134. 9130  IF I = 208  THEN  POP : TEXT : GOTO 80
  135. 9140  IF I >127  THEN  PRINT "<CTRL-G>";: RETURN 
  136. 9150  RETURN 
  137. 30000  REM  H
  138. 30010  ONERR  GOTO 30100
  139. 30020  PRINT : PRINT D$"OPEN FIREFLY.HI.SCORES": PRINT D$"READ FIREFLY.HI.SCORES"
  140. 30030  FOR A = 1 TO 10
  141. 30040  INPUT HS(0,A): INPUT SN$(0,A): INPUT SD$(0,A)
  142. 30050  NEXT A
  143. 30060  PRINT D$"CLOSE": POKE 216,0: RETURN 
  144. 30100  CALL 789
  145. 30110  PRINT D$"CLOSE": POKE 216,0
  146. 30120  GOTO 80
  147. 31000  REM  U
  148. 31002  POKE  -16368,0
  149. 31005 XX = 0
  150. 31010  FOR A = 0 TO 1
  151. 31020 B = 1
  152. 31030  IF SC >HS(A,B)  THEN  GOSUB 31500: GOTO 31100
  153. 31040 B = B +1: IF B <11  THEN 31030
  154. 31100  NEXT A: RETURN 
  155. 31500  REM  
  156. 31503  IF XX = 1  THEN 31540
  157. 31506  IF A = 0  THEN XX = 1
  158. 31510  TEXT : VTAB 8: HTAB 1: PRINT "YOUR SCORE IS IN THE TOP TEN!<CTRL-G><CTRL-G><CTRL-G>"
  159. 31520  PRINT : PRINT "ENTER YOUR NAME.  (LIMIT 16 CHARACTERS)"
  160. 31530  PRINT : INPUT "";SN$
  161. 31532  IF  LEN(SN$) >16  THEN SN$ =  LEFT$(SN$,16)
  162. 31535  IF SC > = HS(0,1)  THEN  VTAB 21: HTAB 30: PRINT SC
  163. 31540  IF B = 10  THEN HS(A,B) = SC:SN$(A,B) = SN$:SD$(A,B) = SD$: RETURN 
  164. 31550  FOR C = 9 TO B  STEP  -1
  165. 31560 HS(A,C +1) = HS(A,C):SN$(A,C +1) = SN$(A,C):SD$(A,C +1) = SD$(A,C)
  166. 31570  NEXT C:HS(A,B) = SC:SN$(A,B) = SN$:SD$(A,B) = SD$: RETURN 
  167. 32000  REM   DISPLAY HI SCORES
  168. 32005  TEXT : POKE 35,20
  169. 32010  HOME : PRINT 
  170. 32020  PRINT 
  171. 32030  PRINT "HIGH SCORES FOR CURRENT RUN:"
  172. 32040  PRINT 
  173. 32050  FOR A = 1 TO 10
  174. 32055  IF HS(1,A) = 0  THEN  PRINT : GOTO 32070
  175. 32060  PRINT " ";A; TAB( 5);HS(1,A); TAB( 15);SN$(1,A); TAB( 32);SD$(1,A)
  176. 32070  NEXT A
  177. 32075  FOR A = 1 TO 300: GOSUB 9100: NEXT A
  178. 32077  HOME : PRINT 
  179. 32078  PRINT 
  180. 32080  PRINT "ALL-TIME HIGH SCORES FOR THIS DISK:"
  181. 32085  PRINT 
  182. 32090  FOR A = 1 TO 10
  183. 32095  IF HS(0,A) = 0  THEN  PRINT : GOTO 32120
  184. 32100  PRINT " ";A; TAB( 5);HS(0,A); TAB( 15);SN$(0,A); TAB( 32);SD$(0,A)
  185. 32120  NEXT A
  186. 32125  PRINT 
  187. 32127  FOR A = 1 TO 300: GOSUB 9100: NEXT A
  188. 32129  TEXT : POKE  -16304,0
  189. 32130  GOTO 9050
  190. 33000  REM  X
  191. 33002  TEXT 
  192. 33005  HOME : PRINT : PRINT "SAVING HI SCORES TO DISK."
  193. 33010  ONERR  GOTO 33100
  194. 33015  PRINT 
  195. 33020  PRINT D$"OPEN FIREFLY.HI.SCORES": PRINT D$"WRITE FIREFLY.HI.SCORES"
  196. 33030  FOR A = 1 TO 10: PRINT HS(0,A): PRINT  CHR$(34)SN$(0,A): PRINT  CHR$(34)SD$(0,A): NEXT A
  197. 33035  PRINT D$"CLOSE"
  198. 33040  POKE 216,0: HOME : PRINT : PRINT "BYE.": END 
  199. 33100  REM   ONERR
  200. 33105  CALL 789
  201. 33107  PRINT D$"CLOSE"
  202. 33110  HOME : PRINT 
  203. 33120  PRINT "DISK ERROR #" PEEK(222)"<CTRL-G>"
  204. 33130  PRINT : PRINT "CHECK TO SEE IF: "
  205. 33140  PRINT "  THERE IS A DISK IN THE DRIVE": PRINT "  THE DRIVE DOOR IS CLOSED": PRINT "  THE DISK IS A DOS 3.3 DISK"
  206. 33150  PRINT "  DISK IS NOT WRITE-PROTECTED OR           COPY-PROTECTED"
  207. 33160  PRINT "OR ANY OTHER PROBLEMS."
  208. 33170  PRINT : PRINT "HIT ANY KEY TO TRY AGAIN. ";: GET I$: PRINT : GOTO 33000
  209. 50000  REM  *